﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Web.UI.WebControls;
using System.Configuration;
using UtilityExtensions;
using System.IO;
using System.Transactions;

namespace BOL.Comun
{
    public class ArchivoBL
    {
        public Archivo AddOrdenVentaDocumento( FileUpload archivoFileUpload,int idProyecto,int idOrdenVenta)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
            new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());
                
                //para ser idientificado en la carpeta de archivos
                string rutaadd="ORDENVENTA\\{0}\\{1}\\".Fmt(idProyecto,idOrdenVenta);


                ruta = String.Format("{0}{1}",ruta,rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);


                string newNombre = Guid.NewGuid().ToString();
              
                string sFileName = ruta + newNombre;
                
                archivoFileUpload.SaveAs(sFileName);

              

                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();
                ts.Complete();

                return archivo;
            }
        }
        public Archivo AddEtapaImagen(FileUpload archivoFileUpload, int idEtapa)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());
               
                //para ser identificado en la carpeta de archivos
                string rutaadd = "ETAPA\\IMAGEN_{0}\\".Fmt(idEtapa);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                string newNombre = Guid.NewGuid().ToString();

                //string sFileName = ruta + archivoFileUpload.FileName;
                string sFileName = ruta + newNombre;

                archivoFileUpload.SaveAs(sFileName);

                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();

                ts.Complete();
                return archivo;
            }
        }
        public Archivo AddProyectoContrato(FileUpload archivoFileUpload, int idProyecto)
        {                                


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());

                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                //para ser identificado en la carpeta de archivos
                string rutaadd = "PROYECTO\\CONTRATO_{0}\\".Fmt(idProyecto);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                string newNombre = Guid.NewGuid().ToString();

                string sFileName = ruta + newNombre;

                archivoFileUpload.SaveAs(sFileName);

                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();

                ts.Complete();
                return archivo;
            }
        }
        public Archivo AddProyectoImagen(FileUpload archivoFileUpload, int idProyecto)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
               
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                //para ser identificado en la carpeta de archivos
                string rutaadd = "PROYECTO\\IMAGEN_{0}\\".Fmt(idProyecto);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                string newNombre = Guid.NewGuid().ToString();

                //string sFileName = ruta + archivoFileUpload.FileName;
                string sFileName = ruta + newNombre;
                archivoFileUpload.SaveAs(sFileName);

                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();

                ts.Complete();
                return archivo;
            }
        }
        public Archivo AddProyectoDeposito(FileUpload archivoFileUpload, int idProyecto)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                DAL.Proyecto proyecto = _db.Proyectos.Single(p => p.idInternal == idProyecto);

                //para ser idientificado en la carpeta de archivos
                string rutaadd = "PROYECTO\\DEPOSITO_{0}\\".Fmt(proyecto.idInternal);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                

                string newNombre = Guid.NewGuid().ToString();

                string sFileName = ruta + newNombre;

                archivoFileUpload.SaveAs(sFileName);


                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();
                ts.Complete();

                return archivo;



            }
        }
        public Archivo AddLocalizacionImagen(FileUpload archivoFileUpload, int idLocalizacion)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                DAL.UILocalizacion localizacion = _db.UILocalizacions.Single(p => p.idInternal == idLocalizacion);

                //para ser idientificado en la carpeta de archivos

                string rutaadd = "ETAPA\\IMAGEN_{0}\\LOCALIZACION_{1}\\".Fmt(localizacion.idEtapa, idLocalizacion);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                string newNombre = Guid.NewGuid().ToString();

                string sFileName = ruta + newNombre;

                archivoFileUpload.SaveAs(sFileName);



                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();
                ts.Complete();

                return archivo;



            }
        }


        public Archivo AddUIModeloImagen(FileUpload archivoFileUpload, int idModelo)
        {


            using (TransactionScope ts = new TransactionScope())
            {
                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

                dbGestionDataContext _db =
                        new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                
                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                DAL.UIModeloTipo modelo = _db.UIModeloTipos.Single(p => p.idInternal == idModelo);

                //para ser idientificado en la carpeta de archivos

                string rutaadd = "PROYECTO\\IMAGEN_{0}\\MODELO_{1}\\".Fmt(modelo.idProyecto, idModelo);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                string newNombre = Guid.NewGuid().ToString();

                string sFileName = ruta + newNombre;

                archivoFileUpload.SaveAs(sFileName);



                Archivo archivo = new Archivo();
                archivo.AddSet(_db, rutaadd.Replace("\\", "/"), newNombre, archivoFileUpload.PostedFile.ContentType, idEmpleadoEmisor);
                _db.SubmitChanges();
                ts.Complete();

                return archivo;



            }
        }

        public void AddEmpleadoFirmaImagen(FileUpload archivoFileUpload, int idEmpleado)
        {

                if (System.Web.HttpContext.Current.Session["idEmpleado"] == null) { throw new Exception("Debe volver a Login"); }

              
                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());

                string ruta = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FileDocumento"].ToString());

                DAL.Empleado modelo = DbUtil.Db.Empleados.Single(p => p.idInternal == idEmpleado);

                //para ser idientificado en la carpeta de archivos

                string rutaadd = "EMPLEADO\\Firma\\{0}\\".Fmt(modelo.idInternal);

                ruta = String.Format("{0}{1}", ruta, rutaadd);

                if (!Directory.Exists(ruta))
                    Directory.CreateDirectory(ruta);

                

                string sFileName = ruta + archivoFileUpload.FileName;

                archivoFileUpload.SaveAs(sFileName);


            }
 
    }
}
